
package com.hlkj.pay.app.order;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import com.hlkj.framework.common.pojo.CommonResult;
import com.hlkj.pay.infrastructure.model.order.OrderTransferDO;
import com.hlkj.pay.vo.openapi.order.req.OpenApiOrderQueryReq;
import com.hlkj.pay.vo.openapi.order.req.OpenApiOrderTransferPreReq;
import com.hlkj.pay.vo.openapi.order.req.OpenApiOrderTransferReq;
import com.hlkj.pay.vo.openapi.order.resp.OpenApTransferBalanceResp;
import com.hlkj.pay.vo.openapi.order.resp.OpenApiOrderTransferResp;
import com.hlkj.pay.vo.order.req.OrderTransferPreReq;
import com.hlkj.pay.vo.order.req.OrderTransferReq;
import com.hlkj.pay.vo.order.resp.OrderTransferResp;

/**
 * @author HlpayTeam
 * @date 2024/10/09 13:50
 */
public interface ITransferOrderAppService {

    /**
     *
     * @param channelCode
     * @param providerCode
     * @param request
     * @return
     */
    String orderStatusCallBack(String channelCode, String providerCode, HttpServletRequest request);
    /**
     *
     * @param orderTransferReq
     * @return
     */
    CommonResult<OpenApiOrderTransferResp> submitPreOrder(@Valid OpenApiOrderTransferPreReq orderTransferReq);
    /**
     *
     * @param orderTransferReq
     * @return
     */
    CommonResult<OpenApiOrderTransferResp> submitOrder(@Valid OpenApiOrderTransferReq orderTransferReq);

    /**
     *
     * @param orderQueryReq
     * @return
     */
    CommonResult<OpenApiOrderTransferResp> queryOrder(OpenApiOrderQueryReq orderQueryReq);

    /**
     * 
     * @param mchChannelCode
     * @return
     */
    CommonResult<OpenApTransferBalanceResp> balanceQuery(String mchChannelCode);

    /**
     *
     * @param orderTransferPreReq
     * @return
     */
    CommonResult<OrderTransferResp> submitPreOrder(OrderTransferPreReq orderTransferPreReq);
    /**
     *
     * @param orderTransferReq
     * @return
     */
    CommonResult<OrderTransferResp> submitOrder(OrderTransferReq orderTransferReq);
    boolean queryPayStatus(OrderTransferDO payOrderDO);
}
